package cn.edu.zsc.rbac.domain.vo;

import cn.edu.zsc.rbac.util.DateTimeUtils;

import java.time.LocalDateTime;

public class UserVo extends BaseVo{
    /**
     * ⽤户名，⽤户登录系统时使⽤的名称
     */
    public String username;
    /**
     * 姓名，⽤户的真实姓名
     */
    public String name;
    /**
     * 电话，⽤户的联系电话号码
     */
    public String mobile;
    /**
     * 邮箱，⽤户的电⼦邮箱地址
     */
    public String email;
    /**
     * 部⻔ ID，关联⽤户所属的部⻔
     */
    public Integer deptId;
    /**
     * ⻆⾊ ID，关联⽤户所拥有的⻆⾊
     */
    public Integer roleId;
    /**
     * 状态，⽤于表示⽤户账号是否启⽤，默认为 true 表示启⽤
     */
    public boolean enabled = true;
    /**
     * 部⻔名称，⽤户所属部⻔的具体名称
     */
    public String deptName;
    /**
     * ⻆⾊名称，⽤户所拥有⻆⾊的具体名称
     */
    public String roleName;
    /**
     * ⽆参构造⽅法，⽤于创建⼀个空的 UserVo 对象
     */
    public UserVo() {
    }

    public UserVo(Integer id, LocalDateTime createAt, LocalDateTime updateAt, String username,
                  String name, String mobile, String email, Integer deptId,
                  Integer roleId, boolean enabled, String deptName, String roleName) {
        super(id, createAt, updateAt);
        this.username = username;
        this.name = name;
        this.mobile = mobile;
        this.email = email;
        this.deptId = deptId;
        this.roleId = roleId;
        this.enabled = enabled;
        this.deptName = deptName;
        this.roleName = roleName;
    }

    /**
     * 有参构造⽅法，⽤于创建⼀个包含指定信息的 UserVo 对象
     *
     * @paramid ⽤户的唯⼀标识 ID
     * @paramusername ⽤户登录系统使⽤的名称
     * @paramname ⽤户的真实姓名
     * @parammobile ⽤户的联系电话号码
     * @paramemail ⽤户的电⼦邮箱地址
     * @paramdeptId ⽤户所属部⻔的 ID
     * @paramroleId ⽤户所拥有⻆⾊的 ID
     * @paramenabled ⽤户账号的启⽤状态
     * @paramdeptName ⽤户所属部⻔的名称
     * @paramroleName ⽤户所拥有⻆⾊的名称
     */


    @Override
    public String toString() {
        return String.format("id:%d，⽤户名：%s，姓名：%s，⼿机号：%s，邮箱：%s，部⻔名称： %s，⻆⾊名称：%s，状态：%s,更新时间：%s",
        id, username, name, mobile, email, deptName, roleName,
                enabled ? "启⽤" : "禁⽤", DateTimeUtils.format(updateAt));
    }
}
